package org.example.chapter10.controller;

import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.format.annotation.NumberFormat;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * @author CoderXshuai
 */
@RequestMapping("/my")
@Controller
public class MyController {
    /**
     * 在无注解下获取参数,要求参数名称和HTTP请求参数名称保持一致
     *
     * @param intVal  整型
     * @param longVal 长整型
     * @param str     字符串
     * @return 响应JSON参数
     */
    @GetMapping("/no/annotation")
    @ResponseBody
    public Map<String, Object> noAnnotation(Integer intVal, Long longVal, String str) {
        Map<String, Object> paramsMap = new HashMap<>(4);
        paramsMap.put("intVal", intVal);
        paramsMap.put("longVal", longVal);
        paramsMap.put("str", str);
        return paramsMap;
    }

    /**
     * 通过注解@RequestParam获取参数
     *
     * @param intVal  整型
     * @param longVal 长整型
     * @param strVal  字符串
     * @return 响应JSON数据集
     */
    @GetMapping("/annotation")
    @ResponseBody
    public Map<String, Object> requestParam(
            @RequestParam("int_val") Integer intVal,
            @RequestParam("long_val") Long longVal,
            @RequestParam(value = "str_val", required = false) String strVal) {
        Map<String, Object> paramsMap = new HashMap<>(4);
        paramsMap.put("intVal", intVal);
        paramsMap.put("longVal", longVal);
        paramsMap.put("strVal", strVal);
        return paramsMap;
    }

    @GetMapping("/requestArray")
    @ResponseBody
    public Map<String, Object> requestArray(
            Integer[] intArr, Long[] longArr, String[] strArr) {
        Map<String, Object> paramsMap = new HashMap<>(4);
        paramsMap.put("intArr", intArr);
        paramsMap.put("longArr", longArr);
        paramsMap.put("strArr", strArr);
        return paramsMap;
    }

    /**
     * format测试
     *
     * @param date   日期
     * @param number 数字
     * @return map
     */
    @PostMapping("/format/commit")
    @ResponseBody
    public Map<String, Object> format(
            @DateTimeFormat(pattern = "yyyy-MM-dd") Date date,
            @NumberFormat(pattern = "#,###.##") Double number) {
        Map<String, Object> dataMap = new HashMap<>(3);
        dataMap.put("date", date);
        dataMap.put("number", number);
        return dataMap;
    }
}
